//导入数据库连接模块
const db = require('../db/index');

//定义用户模型
const userModel = db.model('user', {
  __v: { type: Number, select: false },
  phone: { type: String, require: true },
  password: { type: String, require: true },
  paperid: { type: Array, default: [] },
  group: {
    type: Array,
    default: [],
  },
  email: {
    type: String,
    default: '',
  },
  ctime: {
    type: Date,
    default: Date.now,
  },
});

//添加用户处理函数
const createUser = userinfo => {
  const user = new userModel(userinfo);
  //向数据库中增加数据
  return user
    .save()
    .then(res => {
      // console.log("save" + res);
      return res;
    })
    .catch(err => {
      console.log('插入失败' + err);
      return false;
    });
};

//按用户名查找用户处理函数
const findOneUser = userinfo => {
  return userModel
    .findOne({ phone: userinfo.phone })
    .then(res => {
      return res;
    })
    .catch(err => {
      console.log(err);
      return false;
    });
};

//按ID查询用户信息处理函数 unless参数表示不需要显示的信息
const findUserByid = (id, unless) => {
  return userModel
    .findById(id, unless)
    .then(res => {
      return res;
    })
    .catch(err => {
      console.log(err);
      return false;
    });
};

//按id更新用户信息的处理函数
const updateOneUser = (id, info) => {
  return userModel
    .updateOne({ _id: id }, { $set: info })
    .then(res => {
      return res;
    })
    .catch(err => {
      console.log('error:' + err.message);
      return false;
    });
};

//更新密码
const updatePassword = () => {
  return userModel
    .updateOne({ _id: id }, { $set: info })
    .then(res => {
      return res;
    })
    .catch(err => {
      console.log('error:' + err.message);
      return false;
    });
};

//展示所有用户信息
const findUsers = (query, pagenum, pagesize) => {
  //i- 修饰符是用来执行不区分大小写的匹配 g- 修饰符是用于执行全文的搜索
  const queryReg = new RegExp(query, 'gi');
  return (
    userModel
      .find({ name: { $regex: queryReg } }, '-password')
      //sort用于排序，其中-1表示降序，1表示升序
      // .sort({ age: -1 })
      //skip跳过指定数量的数据，必须是整数
      .skip((pagenum - 1) * pagesize)
      //limit限制返回条数，也必须是整数
      .limit(parseInt(pagesize))
      .then(res => {
        //计算查询的总数
        res.total = res.reduce((total, el) => {
          return ++total;
        }, 0);
        // console.log(res);
        return res;
      })
      .catch(err => {
        console.log(err);
        return false;
      })
  );
};

//按id添加用户问卷的处理函数
const updateUserPapers = (id, info) => {
  return userModel
    .updateOne({ _id: id }, info)
    .then(res => {
      return res;
    })
    .catch(err => {
      console.log('error:' + err.message);
      return false;
    });
};

//查询用户问卷的总数
const getUserPapersid = id => {
  return userModel
    .findById(id)
    .then(res => {
      return res.paperid;
    })
    .catch(err => {
      console.log('error:' + err.message);
      return false;
    });
};

module.exports = {
  createUser,
  findOneUser,
  findUsers,
  updateOneUser,
  findUserByid,
  updatePassword,
  updateUserPapers,
  getUserPapersid,
};
